import { login, getuserinfo, getuserid } from '../../api/user'
import { resetRouter } from '@/router'
const state = {
  // 因为第一次进去我们没有登入是没有token的，所以要使用短路运算，或为空
  token: localStorage.getItem('token') || '',
  // state这里要定义一个userinfo:{} 对象接收同步的数据
  userinfo: {}
}
const mutations = {
  setoken(state, data) {
    // data就是接收异步传过来的token
    console.log(data)
    // 存到本地储存，避免刷新丢失
    localStorage.setItem('token', data)
    // 把数据存到 state.token里 马上使用
    state.token = data
  },
  // 定义同步函数,接收 state与daata,参数,data是接收异步传来的数据
  setuserinfo(state, data) {
    // state就是我们放数据的地方,使用state调用他里面的 userinfo,把我们data接收的数据传给他,注意这里要使用 { ...data }展开数据
    state.userinfo = { ...data }
  },
  // 清除token
  remotoken(state) {
    // 清除state里面的token数据
    state.token = ''
    // 清除本地储存
    localStorage.removeItem('token')
  },
  // 清除axios请求回来的数据
  remouserinfo(state) {
    state.userinfo = {}
  }
}
const actions = {
  async login(store, data) {
    const res = await login(data)
    console.log(19, '点击登入触发', res)

    // 调用同步使用commit，传入两个参数，第一个值是同步的名字，第二个是传过去的数据,把token传过去
    store.commit('setoken', res)
    console.log('登入成功')

    // 储存登入时间
    localStorage.setItem('loginTime', Date.now())
  },
  async getuserinfo(store) {
    // 使用 async 与 await 发起axios请求
    const res = await getuserinfo()
    console.log('用户基本数据', res)

    const dliid = await getuserid(res.userId)
    // 使用store.commit()方法调用同步函数,第一个值是同步函数的名字,第二个值是我们要传过去的值  res
    // 使用 ...res,...res合并两个函数的数据成为一个对象
    store.commit('setuserinfo', {
      ...res,
      ...dliid
      // 把图片数据修改为空,就不会报错了
      // 强制图片为空
      // staffPhoto: '' // axios请求回来的图片
    })
  },
  // 封装清除的数据
  logut(store) {
    resetRouter()
    store.commit('remotoken')
    store.commit('remouserinfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
